package scholarsearch.activity;


import java.util.ArrayList;
import java.util.HashMap;

import scholarsearch.android.IndexSearch;
import scholarsearch.android.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;

public class RicercaPiuAutori extends Activity {
	private static final int CANCELLA_ID = Menu.FIRST;
	private static final int ANNULLA_ID = Menu.FIRST+1;
	private RadioButton autoreRadioButton;
	private CheckBox avanzata;
	private EditText autoreEditText;
	private IndexSearch ricerca = new IndexSearch();
	private ArrayList<String> nomiAutori=new ArrayList<String>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ricerca_piu_autori);
        
        // STANZIAMENTO RADIOBUTTON
        autoreRadioButton=(RadioButton) findViewById(R.id.radioSingoloI);
        autoreRadioButton.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if ( isChecked )
                {
                Context context = getBaseContext();
            	  Intent myIntent = new Intent(context, Main.class);
                startActivityForResult(myIntent, 0);
                finish();
                }

            }
        });
        
        // STANZIAMENTO CHECKBOX
        avanzata=(CheckBox) findViewById(R.id.checkBoxRicercaAvanzataI);
        avanzata.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {

			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				if ( isChecked==true )
                {
                Context context = getBaseContext();
            	  Intent myIntent = new Intent(context, RicercaAvanzataAutori.class);
                startActivityForResult(myIntent, 0);
                finish();
                }
			}
        });
        
        // STANZAIMENTO EDITTEXT
        autoreEditText = (EditText) findViewById(R.id.editTextAutoreI);
        
        // POPOLAMENTO LISTVIEW AUTORI
        popolaListView();
    }
    
    /**
     * Metodo di controllo connessione, controlla sia presente una connessione internet
     * 
     * @return null
     */
    private boolean CheckIntConn() {
        ConnectivityManager connectivityManager
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }
    
    /**
     * Metodo di gestione del pulsante +, verifica vi sia una stringa utile che, in caso affermativo, viene aggiunta all'arraylist nomiAutori
     * 
     * @param v, View
     * 
     *         Riferimento al button premuto
     */
    public void aggiungiAutore(View v) {
    	String nomeAutore;
    	nomeAutore=ricerca.verificaStringa(autoreEditText.getText().toString());
    	if (nomeAutore.contains("#vuoto#")==false){
	            nomiAutori.add(nomeAutore);
	            popolaListView();
	         }
	   		else{
	            Context context = getApplicationContext();
	            CharSequence text = "Parametro errato";
	            int duration = Toast.LENGTH_SHORT;
	            Toast toast = Toast.makeText(context, text, duration);
	            toast.show();
	         }
    	autoreEditText.setText(null);
        nomeAutore=null;
   		}
   		
    /**
     * Metodo di gestione del pulsante Cerca, verifica vi siano parametri utili per la ricerca e, in caso di presenza di una connessione internet, inizializza la ricerca
     * 
     * @param v, View
     * 
     *         Riferimento al button premuto
     */
    public void ricercaPiuAutori(View v) {
   		boolean checkConnection=false;
   		if (nomiAutori.get(0).contains("es. Nome Autore 1")==false){
	   		if(CheckIntConn()){
	            //Context context = getApplicationContext();
	            checkConnection=true;
	            /*CharSequence text = "Avvio ricerca";
	            int duration = Toast.LENGTH_SHORT;
	            Toast toast = Toast.makeText(context, text, duration);
	            toast.show();*/
	         }
	   		else{
	    	    checkConnection=false;
	            Context context = getApplicationContext();
	            CharSequence text = "Connessione non attiva";
	            int duration = Toast.LENGTH_SHORT;
	            Toast toast = Toast.makeText(context, text, duration);
	            toast.show();
	         }
	   		if (checkConnection==true){
	            Intent intent = new Intent(getApplicationContext(), RisultatiRicerca.class);
	   			String pkg=getPackageName();
	   			intent.putStringArrayListExtra(pkg+".nomiAutori", nomiAutori);
	   			intent.putExtra(pkg+".URL",ricerca.ricercaPiuAutori(nomiAutori));
	   			ArrayList<String> materie= new ArrayList<String>();
				materie.add("Tutte le materie");
	   			intent.putStringArrayListExtra(pkg+".materieRicerca", materie);
	   			intent.putExtra(pkg+".tipoRicerca", "Ricerca ovunque");
	            startActivity(intent);
	            }
	   		}
   		else {
            Toast toast = Toast.makeText(getApplicationContext(), "Valori di ricerca errati", Toast.LENGTH_SHORT);
            toast.show();
   		}
   	}
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
}
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.nuova_ricerca:
        	Toast.makeText(this.getApplicationContext(),"Nuova ricerca",Toast.LENGTH_SHORT).show();
        	Context context = getBaseContext();
      	    Intent myIntent = new Intent(context, Main.class);
            startActivityForResult(myIntent, 0);
            finish();
            return true;
        case R.id.info:
        	Toast.makeText(this.getApplicationContext(),"Info",Toast.LENGTH_SHORT).show();
            return true;
        case R.id.carica_ricerca:
        	Context contextCarica = getBaseContext();
      	    Intent myIntentCarica = new Intent(contextCarica, Carica.class);
            startActivityForResult(myIntentCarica, 0);
        	return true;
        case R.id.chiudi:
        	finish();
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    


	/**
	 * Metodo per popolare la Listview dei nomi autore
	 */
	private void popolaListView(){

	    ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
	    if (nomiAutori.size()==0) nomiAutori.add("es. Nome Autore 1");
	    else if (nomiAutori.get(0).contains("es. Nome Autore 1")==true) nomiAutori.remove(0);
	    for(int i=0;i<nomiAutori.size();i++){
	    	String p=nomiAutori.get(i);
	    	
	    	
	    	HashMap<String,Object> articoloMap=new HashMap<String, Object>();
	    	
	    	articoloMap.put("nome", p);
	    	data.add(articoloMap);
	    }
	   
	    
	    String[] from={"nome"};
	    int[] to={R.id.autoreLista};
	    
	    //costruzione dell adapter
	    SimpleAdapter adapter=new SimpleAdapter(
	    		getApplicationContext(),
	    		data,
	    		R.layout.autore, 
	    		from,
	    		to);
	   
	    //utilizzo dell'adapter
	    ListView listaAutori=(ListView)findViewById(R.id.listaAutori);
	    listaAutori.setAdapter(adapter);
	    if (nomiAutori.get(0).contains("es. Nome Autore 1")==false){
	    	registerForContextMenu(findViewById(R.id.listaAutori));
	    }	
	}
	
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
	   super.onCreateContextMenu(menu,v,menuInfo);
	   menu.setHeaderTitle("Opzioni"); 
	   menu.add(0,CANCELLA_ID,0,"Cancella");
	   menu.add(0,ANNULLA_ID,0,"Annulla");
	}
	 
	@Override
	public boolean onContextItemSelected(MenuItem item) {
	   final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
	   
	switch (item.getItemId()) {
	   case ANNULLA_ID:
	      return true;
	   case CANCELLA_ID:
		  Toast.makeText(getApplicationContext(),"Valore "+ nomiAutori.get(info.position)+ " eliminato",Toast.LENGTH_SHORT).show();
	      nomiAutori.remove(info.position);
	      
	      //adapter.notifyDataSetChanged();
	      popolaListView();
	      return true;
	   default:
	      return super.onContextItemSelected(item);
	   }
	}
	
	/*
	 * Metodo per la creazione del dialog Modifica
	 * 
	 * @param position
	 /
	private void apriModificaDialog(final int position){
		//STANZIAMENTO DIALOG
		final Dialog dialog = new Dialog(RicercaPiuAutori.this);
        dialog.setContentView(R.layout.ricerca_piu_autori_dialog_modifica);
        dialog.setTitle("Modifica");
        dialog.setCancelable(true);
    	
        //STANZIAMENTO EDITTEXT
         EditText modificaAutoreEditText = (EditText) findViewById(R.id.editTextNomeAutore);
         modificaAutoreEditText.setText("Prova");
         //modificaAutoreEditText.setText(nomiAutori.get(position), TextView.BufferType.EDITABLE);
        //nomiAutori.get(info.position)
         //TextView text =(TextView)findViewById(R.id.textViewAutore);
         //text.setText("prova");
        //STANZIAMENTO BUTTON
        Button annulla = (Button) dialog.findViewById(R.id.annullaModificaButton);
        annulla.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        	dialog.dismiss();
            }
        });
        Button modifica = (Button) dialog.findViewById(R.id.dialogModificaButton);
        modifica.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        	String nomeAutore;
        	//EditText modificaAutoreEditText = (EditText) findViewById(R.id.editTextNomeAutore);
        	//nomeAutore=ricerca.verificaStringa(modificaAutoreEditText.getText().toString());
        	nomeAutore="pippo";
        	if (nomeAutore.contains("#vuoto#")==false){
    	            nomiAutori.set(position, nomeAutore);
    	            popolaListView();
    	            dialog.dismiss();
    	         }
    	   		else{
    	            Context context = getApplicationContext();
    	            CharSequence text = "Parametro errato";
    	            int duration = Toast.LENGTH_SHORT;
    	            Toast toast = Toast.makeText(context, text, duration);
    	            toast.show();
    	         }
            }
        });   
        dialog.show();
	}*/
}